package com.helwen.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Objects;
import java.util.Optional;

/*MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口，我们可以利用这个接口在我们插入或者更新数据的时候，为一些字段指定默认值。
        使用场景：公共字段填充等，如updateTime、createTime、createUser、updateUser等公共字段多的填充。
        1）@TebleField(fill = FieldFill.INSERT):表示此字段只在插入/新增操作时更新数据
        2）@TebleField(fill = FieldFill.INSERT_UPDATE):表示此字段在修改和新增操作时都更新数据；
        3）@TebleField(fill = FieldFill.UPDATE):表示此字段只在修改操作时都更新数据；
        原文链接：https://blog.csdn.net/fengzheng1232/article/details/130223629*/

/**
 * @author xay
 * @version 1.0
 * @since 2020/11/2
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {


    @Override
    public void insertFill(MetaObject metaObject) {
        // 拦截mybais的sql,设置一些默认值 ，如创建人
        /*this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
        Optional<UserDto> optionalUserDto = ServletUtils.safeCurrentUser();
        if(!optionalUserDto.isPresent()){
            return;
        }
        UserDto userDto = optionalUserDto.get();
        this.strictInsertFill(metaObject, "createUser", userDto::getId, Long.class);
        if(!Objects.equals(userDto.getUserType(), Constants.USER_TYPE_SYS)){
            this.strictInsertFill(metaObject, "city",userDto::getTenantId, String.class);
        }*/
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 拦截mybais的sql,设置一些默认值 ，如修改人
        /*Optional<UserDto> optionalUserDto = ServletUtils.safeCurrentUser();
        if(!optionalUserDto.isPresent()){
            return;
        }
        UserDto userDto = optionalUserDto.get();
        this.strictUpdateFill(metaObject, "updateUser", userDto::getId, Long.class);
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);*/
    }

}
